#!/usr/bin/env python
#coding:utf-8

'''
练习了：类定义、类的多种构造方式（普通，用类方法构造）、链表使用。（类对象赋值类似于C++的指针）
'''
import os
import math

class Solution(object):
	def lengthOfLongestSubstring1(self, s):
		"""
		:type s: str
		:rtype: int
		"""
		maxlen = 0
		sub_s = 0   # 记录字串的开始位置，再出现重复的时候，删除之前元素使用
		substr_set = set()
		slen = len(s)
		for i,v in enumerate(s):
			if v not in substr_set:
				substr_set.add(v)
				maxlen = max(maxlen, len(substr_set))
				print maxlen, substr_set
			else:
				for i1 in range(sub_s, i):
					if s[i1] != v:
						substr_set.remove(s[i1])
					else:
						sub_s = i1 +1
						break
		return maxlen

	def lengthOfLongestSubstring(self, s):
		"""
		:type s: str
		:rtype: int
		"""
		start = maxLength = 0
		box = {}
		for i, char in enumerate(s):
			if char in box and start <= box[char]:
				start = box[char] + 1
			else:
				maxLength = max(maxLength, i - start + 1)  # 上次的最大长度和这次的i到start的长度
			box[char] = i
		return maxLength



if __name__ == "__main__":

	#mystr = "auglspegesmkxyctbnmfofkinhrujhnjdvuvnbbrtobrmgmqtyxhfjrurkpcrelwzhroiuicilvxr"
	mystr = "1234315672"
	solution = Solution()
	rtn = solution.lengthOfLongestSubstring(mystr)
	print rtn


'''
给定一个字符串，请你找出其中不含有重复字符的 最长子串 的长度。

示例 1:

输入: "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc"，所以其长度为 3。
示例 2:

输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b"，所以其长度为 1。
示例 3:

输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke"，所以其长度为 3。
     请注意，你的答案必须是 子串 的长度，"pwke" 是一个子序列，不是子串。
'''